package com.excilys.formation.projet.ebanking.webapp.date;

import java.util.ArrayList;
import java.util.List;

import org.joda.time.DateTime;

public class MonthPickerEnable {
	
	private ArrayList<String> moisAnnee;
	private DateTime date;
	
	private int moisDemande;
	private String nomMoisCourant;
	private int anneeDemande;
	
	private ArrayList<Mois> mois;
	private List<Annee> annees;
	private int moisMax;
	private int moisMin;
	
	private String finUrl;
	
	public ArrayList<String> getMoisAnnee() {
		return moisAnnee;
	}
	
	public void setMoisAnnee(ArrayList<String> moisAnnee) {
		this.moisAnnee = moisAnnee;
	}
	
	public MonthPickerEnable(int nbMois, int anneeDemandee, int moisDemande) {
		mois = new ArrayList<Mois>();
		annees = new ArrayList<Annee>();
		date = new DateTime();
		moisAnnee = new ArrayList<String>();
		this.anneeDemande = anneeDemandee;
		this.moisDemande = moisDemande;
		this.moisMin = date.minusMonths(nbMois).getMonthOfYear();
		this.moisMax = date.getMonthOfYear();
		
		init(nbMois);
		disableMois(anneeDemande);
	}
	
	public MonthPickerEnable(int nbMois) {
		mois = new ArrayList<Mois>();
		annees = new ArrayList<Annee>();
		moisAnnee = new ArrayList<String>();
		date = new DateTime();
		this.anneeDemande = date.getYear();
		this.moisDemande = date.getMonthOfYear();
		this.moisMin = date.minusMonths(nbMois).getMonthOfYear();
		this.moisMax = date.getMonthOfYear();
		
		init(nbMois);
		disableMois(anneeDemande);
	}
	
	private void initMois() {
		moisAnnee.add("Jan");
		moisAnnee.add("Fev");
		moisAnnee.add("Mar");
		moisAnnee.add("Avr");
		moisAnnee.add("Mai");
		moisAnnee.add("Juin");
		moisAnnee.add("Juil");
		moisAnnee.add("Aout");
		moisAnnee.add("Sept");
		moisAnnee.add("Oct");
		moisAnnee.add("Nov");
		moisAnnee.add("Dec");
	}
	
	private void init(int nbMois) {
		int nbAnnees = nbMois / 12 + 1;
		if (nbMois % 12 > date.getMonthOfYear()) {
			nbAnnees++;
		}
		int anneeCourante = date.getYear();
		for (int i = 0; i < nbAnnees; i++) {
			int an = anneeCourante - i;
			Annee annee;
			// mois avant max dispo
			// on retiens le mois max
			if (i == 0) {
				if (moisDemande > moisMax) {
					annee = new Annee(an, moisMax);
				}
				else
					annee = new Annee(an, moisDemande);
				
				annees.add(annee);
			}
			// mois apres max dispo
			else if (i == nbAnnees - 1) {
				;
				if (moisDemande <= moisMin)
					annee = new Annee(an, moisMin + 1);
				else
					annee = new Annee(an, moisDemande);
				annees.add(annee);
			}
			// tout les mois dispo
			
			else {
				annee = new Annee(an, moisDemande);
				annees.add(annee);
			}
			
			if (annee.getNumero() == anneeDemande)
				annee.setCourante(true);
			
		}
		
		initMois();
	}
	
	private void disableMois(int annee) {
		
		if (annee == annees.get(0).getNumero()) {
			for (int i = 0; i < moisAnnee.size(); i++)
				if (i >= moisMax)
					mois.add(new Mois(i + 1, moisAnnee.get(i), false, false));
				else if (i == moisDemande - 1) {
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, true));
					nomMoisCourant = moisAnnee.get(i);
				}
				else
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, false));
		}
		else if (annee == annees.get(annees.size() - 1).getNumero()) {
			
			for (int i = 0; i < moisAnnee.size(); i++)
				if (i == moisDemande - 1) {
					System.out.println("BB4BBBBBBBBBBBBB" + moisDemande + i);
					nomMoisCourant = moisAnnee.get(i);
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, true));
				}
				else if (i >= moisMin)
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, false));
				else
					mois.add(new Mois(i + 1, moisAnnee.get(i), false, false));
		}
		else {
			for (int i = 0; i < moisAnnee.size(); i++)
				if (i == moisDemande - 1) {
					nomMoisCourant = moisAnnee.get(i);
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, true));
				}
				else
					mois.add(new Mois(i + 1, moisAnnee.get(i), true, false));
			
		}
		
	}
	
	public ArrayList<Mois> getMois() {
		return mois;
	}
	
	public void setMois(ArrayList<Mois> mois) {
		this.mois = mois;
	}
	
	public String getNomMoisCourant() {
		return nomMoisCourant;
	}
	
	public void setNomMoisCourant(String nomMoisCourant) {
		this.nomMoisCourant = nomMoisCourant;
	}
	
	public DateTime getDate() {
		return date;
	}
	
	public void setDate(DateTime date) {
		this.date = date;
	}
	
	public void setAnnees(List<Annee> annees) {
		this.annees = annees;
	}
	
	public List<Annee> getAnnees() {
		return annees;
	}
	
	public void setAnnees(ArrayList<Annee> annees) {
		this.annees = annees;
	}
	
	public int getMoisCourant() {
		return moisDemande;
	}
	
	public void setMoisCourant(int moisCourant) {
		this.moisDemande = moisCourant;
	}
	
	public int getAnneeCourante() {
		return anneeDemande;
	}
	
	public void setAnneeCourante(int anneeCourante) {
		this.anneeDemande = anneeCourante;
	}
	
	public void setFinUrl(String finUrl) {
		this.finUrl = finUrl;
	}
	
	public String getFinUrl() {
		return finUrl;
	}
	
}
